From: <Saved by Windows Internet Explorer 7>
Subject: Ruby QuickRef
Date: Thu, 1 Nov 2007 21:04:32 +0100
MIME-Version: 1.0
Content-Type: multipart/related;
	type="text/html";
	boundary="----=_NextPart_000_0000_01C81CCA.CCB00B80"
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3198

This is a multi-part message in MIME format.

------=_NextPart_000_0000_01C81CCA.CCB00B80
Content-Type: text/html;
	charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.zenspider.com/Languages/Ruby/QuickRef.html

=EF=BB=BF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" =
"http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML><HEAD><TITLE>Ruby QuickRef</TITLE><LINK rev=3DMADE=20
href=3D"http://www.zenspider.com/Contact.html"><LINK title=3D/style.css=20
href=3D"http://www.zenspider.com/style.css" type=3Dtext/css =
rel=3DSTYLESHEET>
<META content=3Dgeneral name=3Drating>
<META content=3D"MSHTML 6.00.6000.16544" name=3DGENERATOR>
<STYLE type=3Dtext/css>BODY {
	BACKGROUND-COLOR: white
}
</STYLE>

<META content=3D"Ryan Davis" name=3Dauthor>
<META content=3D"1996-2005, Zen Spider Software" name=3Dcopyright>
<META content=3D"Programming, Languages, Ruby, Quick Reference" =
name=3Dkeywords>
<META content=3D"Ruby quick reference." name=3Ddescription>
<META http-equiv=3Dcontent-type content=3D"text/html; charset=3Dutf-8">
<META content=3D"47.61924, -122.32644773" name=3DICBM>
<META content=3D"Ruby QuickRef" name=3DDC.title><LINK title=3DRuby=20
href=3D"/Languages/Ruby/index.html" rel=3Dup><LINK title=3DSiteMap=20
href=3D"/SiteMap.html" rel=3Dcontents><LINK title=3D"Zen Spider Website" =

href=3D"/index.html" rel=3Dtop></HEAD>
<BODY>
<P class=3Dnavbar><A =
href=3D"http://www.zenspider.com/SiteMap.html">Sitemap</A> | <A=20
href=3D"http://www.zenspider.com/Search.html"><EM>Search</EM></A> || <A=20
href=3D"http://www.zenspider.com/index.html">Zen Spider Website</A> / <A =

href=3D"http://www.zenspider.com/Languages/index.html">The Language =
Freak</A> / <A=20
href=3D"http://www.zenspider.com/Languages/Ruby/index.html">Ruby</A> / =
Ruby=20
QuickRef</P>
<H1>Ruby QuickRef</H1>
<HR class=3Dthick>

<H2><A name=3D0>Contents:</A></H2>
<UL>
  <LI><A=20
  =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#0">Contents=
</A>=20
  <LI><A=20
  =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#1">Language=
</A>=20
  <UL>
    <LI><A=20
    =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#2">General =

    Syntax Rules</A>=20
    <LI><A=20
    =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#3">Reserved=
=20
    words</A>=20
    <LI><A=20
    =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#4">Types</A=
>=20
    <UL>
      <LI><A=20
      =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#5">Numbers<=
/A>=20

      <LI><A=20
      =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#6">Strings<=
/A>=20

      <UL>
        <LI><A=20
        =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#7">Backslas=
hes</A>=20

        <LI><A=20
        =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#8">Here=20
        Docs</A> </LI></UL>
      <LI><A=20
      =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#9">Symbols<=
/A>=20

      <LI><A=20
      =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#10">Ranges<=
/A>=20

      <LI><A=20
      =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#11">Regexen=
</A>=20

      <LI><A=20
      =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#12">Arrays<=
/A>=20

      <LI><A=20
      =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#13">Hashes<=
/A>=20

      <LI><A=20
      =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#14">Files</=
A>=20
      <UL>
        <LI><A=20
        =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#15">Mode=20
        Strings</A> </LI></UL></LI></UL>
    <LI><A=20
    =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#16">Variabl=
es</A>=20

    <LI><A=20
    =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#17">Pseudo =

    variables</A>=20
    <LI><A=20
    =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#18">Pre-def=
ined=20
    variables</A>=20
    <LI><A=20
    =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#19">Pre-def=
ined=20
    global constants</A>=20
    <LI><A=20
    =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#20">Express=
ions</A>=20

    <UL>
      <LI><A=20
      =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#21">Terms</=
A>=20
      <LI><A=20
      =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#22">Operato=
rs=20
      and Precedence</A>=20
      <LI><A=20
      =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#23">Control=
=20
      Expressions</A> </LI></UL>
    <LI><A=20
    =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#24">Invokin=
g a=20
    Method</A>=20
    <LI><A=20
    =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#25">Definin=
g a=20
    Class</A>=20
    <LI><A=20
    =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#26">Definin=
g a=20
    Module</A>=20
    <LI><A=20
    =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#27">Definin=
g a=20
    Method</A>=20
    <UL>
      <LI><A=20
      =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#28">Access =

      Restriction</A>=20
      <LI><A=20
      =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#29">Accesso=
rs</A>=20
      </LI></UL>
    <LI><A=20
    =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#30">Aliasin=
g</A>=20

    <LI><A=20
    =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#31">Blocks,=
=20
    Closures, and Procs</A>=20
    <UL>
      <LI><A=20
      =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#32">Blocks/=
Closures</A>=20

      <LI><A=20
      =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#33">Proc=20
      Objects</A> </LI></UL>
    <LI><A=20
    =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#34">Excepti=
ons,=20
    Catch, and Throw</A>=20
    <UL>
      <LI><A=20
      =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#35">Raising=
=20
      and Rescuing</A>=20
      <LI><A=20
      =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#36">Catch =
and=20
      Throw</A> </LI></UL></LI></UL>
  <LI><A=20
  =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#37">Standar=
d=20
  Library</A>=20
  <UL>
    <LI><A=20
    =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#38">Built-i=
n=20
    Library</A>=20
    <UL>
      <LI><A=20
      =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#39">Class=20
      Hierarchy</A>=20
      <LI><A=20
      =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#40">Modules=
</A>=20
      </LI></UL>
    <LI><A=20
    =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#41">Standar=
d=20
    Library</A> </LI></UL>
  <LI><A=20
  =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#42">Tools</=
A>=20
  <UL>
    <LI><A=20
    =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#43">ruby</A=
>=20
    <UL>
      <LI><A=20
      =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#44">Command=
=20
      Line Options</A>=20
      <LI><A=20
      =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#45">Environ=
ment=20
      Variables</A> </LI></UL>
    <LI><A=20
    =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#46">irb</A>=
=20
    <LI><A=20
    =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#47">xmp</A>=
=20
    <LI><A=20
    =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#48">ruby-mo=
de</A>=20

    <LI><A=20
    =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#49">Debugge=
r</A>=20

    <LI><A=20
    =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#50">rdoc</A=
>=20
    </LI></UL>
  <LI><A=20
  =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#51">Mindsha=
re,=20
  Idiom and Patterns</A>=20
  <UL>
    <LI><A=20
    =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#52">Object =

    Design</A>=20
    <UL>
      <LI><A=20
      =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#53">Visitor=
=20
      Pattern</A>=20
      <LI><A=20
      =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#54">Class=20
      SimpleDelegator, DelegateClass</A>=20
      <LI><A=20
      =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#55">Module =

      Observer</A>=20
      <LI><A=20
      =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#56">Module =

      Singleton</A> </LI></UL>
    <LI><A =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#57">Other=20
    Third-party Libraries</A>=20
    <UL>
      <LI><A=20
      =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#58">Racc</A=
>=20
      <LI><A=20
      =
href=3D"http://www.zenspider.com/Languages/Ruby/QuickRef.html#59">Test::U=
nit</A>=20
      </LI></UL></LI></UL></LI></UL><PRE><SCRIPT =
type=3Dtext/javascript><!--=0A=
google_ad_client =3D "pub-2178088302342288";=0A=
google_ad_width =3D 468;=0A=
google_ad_height =3D 60;=0A=
google_ad_format =3D "468x60_as";=0A=
google_ad_type =3D "text";=0A=
google_ad_channel =3D"2870910990";=0A=
google_color_border =3D "000000";=0A=
google_color_bg =3D "F0F0F0";=0A=
google_color_link =3D "0000FF";=0A=
google_color_text =3D "000000";=0A=
google_color_url =3D "008000";=0A=
//--></SCRIPT>
<SCRIPT src=3D"" type=3Dtext/javascript>=0A=
</SCRIPT></PRE>
<H2><A name=3D1>Language</A></H2>
<H3><A name=3D2>General Syntax Rules</A></H3>
<UL>
  <LI>Comments start with a pound/sharp (#) character and go to EOL.=20
  <LI>Ruby programs are sequence of expressions.=20
  <LI>Each expression is delimited by semicolons(;) or newlines unless =
obviously=20
  incomplete (e.g. trailing '+').=20
  <LI>Backslashes at the end of line does not terminate expression. =
</LI></UL>
<H3><A name=3D3>Reserved words</A></H3><PRE>alias   and     BEGIN   =
begin   break   case    class   def     defined=20
do      else    elsif   END     end     ensure  false   for     if=20
in      module  next    nil     not     or      redo    rescue  retry=20
return  self    super   then    true    undef   unless  until   when=20
while   yield </PRE>
<H3><A name=3D4>Types</A></H3>
<P>Basic types are numbers, strings, ranges, regexen, symbols, arrays, =
and=20
hashes. Also included are files because they are used so often.</P>
<H4><A name=3D5>Numbers</A></H4><PRE>123 1_234 123.45 1.2e-3 0xffff =
(hex) 0b01011 (binary) 0377 (octal)
?a       ASCII character
?\C-a    Control-a
?\M-a    Meta-a
?\M-\C-a Meta-Control-a</PRE>
<H4><A name=3D6>Strings</A></H4>
<P>In all of the %() cases below, you may use any matching characters or =
any=20
single character for delimiters. %[], %!!, %@@, etc.</P><PRE>'no =
interpolation'
"#{interpolation}, and backslashes\n"
%q(no interpolation)
%Q(interpolation and backslashes)
%(interpolation and backslashes)
`echo command interpretation with interpolation and backslashes`
%x(echo command interpretation with interpolation and backslashes)</PRE>
<H5><A name=3D7>Backslashes</A></H5><PRE>\t (tab), \n (newline), \r =
(carriage return), \f (form feed), \b
(backspace), \a (bell), \e (escape), \s (whitespace), \nnn (octal),
\xnn (hexadecimal), \cx (control x), \C-x (control x), \M-x (meta x),
\M-\C-x (meta control x)</PRE>
<H5><A name=3D8>Here Docs</A></H5><PRE>&lt;&lt;identifier   - =
interpolated, goes until identifier
&lt;&lt;"identifier" - same thing
&lt;&lt;'identifier' - no interpolation
&lt;&lt;-identifier  - you can indent the identifier by using "-" in =
front</PRE>
<H4><A name=3D9>Symbols</A></H4>
<P>Internalized String. Guaranteed to be unique and quickly comparable. =
Ideal=20
for hash keys. Symbols may not contain \0 or be empty.</P><PRE>:symbol   =
                      =3D&gt; :symbol
:'#{"without"} interpolation'  =3D&gt; :"#{"without"} interpolation"
:"#{"with"} interpolation"     =3D&gt; :"with interpolation"
%s(#{"without"} interpolation) =3D&gt; :"#{"without"} =
interpolation"</PRE>
<H4><A name=3D10>Ranges</A></H4><PRE>1..10
1...10
'a'..'z'
'a'...'z'
(1..10)  =3D=3D=3D 5   =3D&gt; true
(1..10)  =3D=3D=3D 10  =3D&gt; true
(1...10) =3D=3D=3D 10  =3D&gt; false
(1..10)  =3D=3D=3D 15  =3D&gt; false

while gets # prints lines starting at 'start' and ending at 'end'
  print if /start/../end/
end</PRE><PRE>class comparable
  # ...
  def &lt;=3D&gt;(rhs)
    # ...
  end
  def succ
    # ...
  end
end
range =3D =
RangeThingy.new(lower_bound)..RangeThingy.new(upper_bound)</PRE>
<H4><A name=3D11>Regexen</A></H4><PRE>/normal regex/iomx[neus]
%r|alternate form|</PRE>
<P>options:</P><PRE>/i         case insensitive
/o         only interpolate #{} blocks once
/m         multiline mode - '.' will match newline
/x         extended mode - whitespace is ignored
/[neus]    encoding: none, EUC, UTF-8, SJIS, respectively</PRE>
<P>regex characters:</P><PRE>.          any character except newline
[ ]        any single character of set
[^ ]       any single character NOT of set
*          0 or more previous regular expression
*?         0 or more previous regular expression(non greedy)
+          1 or more previous regular expression
+?         1 or more previous regular expression(non greedy)
?          0 or 1 previous regular expression
|          alternation
( )        grouping regular expressions
^          beginning of a line or string
$          end of a line or string
{m,n}      at least m but most n previous regular expression
{m,n}?     at least m but most n previous regular expression(non greedy)
\A         beginning of a string
\b         backspace(0x08)(inside[]only)
\b         word boundary(outside[]only)
\B         non-word boundary
\d         digit, same as[0-9]
\D         non-digit
\S         non-whitespace character
\s         whitespace character[ \t\n\r\f]
\W         non-word character
\w         word character[0-9A-Za-z_]
\z         end of a string
\Z         end of a string, or before newline at the end
(?# )      comment
(?: )      grouping without backreferences
(?=3D )      zero-width positive look-ahead assertion
(?! )      zero-width negative look-ahead assertion
(?ix-ix)   turns on/off i/x options, localized in group if any.
(?ix-ix: ) turns on/off i/x options, localized in non-capturing =
group.</PRE>
<P>special character classes:</P><PRE>[:alnum:]   alpha-numeric =
characters
[:alpha:]   alphabetic characters
[:blank:]   whitespace - does not include tabs, carriage returns, etc
[:cntrl:]   control characters
[:digit:]   decimal digits
[:graph:]   graph characters
[:lower:]   lower case characters
[:print:]   printable characters
[:punct:]   punctuation characters
[:space:]   whitespace, including tabs, carriage returns, etc
[:upper:]   upper case characters
[:xdigit:]  hexadecimal digits</PRE>
<H4><A name=3D12>Arrays</A></H4><PRE>[1, 2, 3]
%w(foo bar baz)
%W(foo bar baz #{var})</PRE>
<P>Indexes may be negative, and they index backwards (eg -1 is last=20
element).</P>
<H4><A name=3D13>Hashes</A></H4><PRE>{1=3D&gt;2, 2=3D&gt;4, 3=3D&gt;6}
{ expr =3D&gt; expr...}</PRE>
<H4><A name=3D14>Files</A></H4>
<P>Common methods include:</P>
<UL>
  <LI>File.join(p1, p2, ... pN) =3D&gt; "p1/p2/.../pN" platform =
independent paths=20
  <LI>File.new(path, modestring=3D"r") =3D&gt; file=20
  <LI>File.new(path, modenum [, permnum]) =3D&gt; file=20
  <LI>File.open(fileName, aModeString=3D"r") {|file| block} -&gt; nil=20
  <LI>File.open(fileName [, aModeNum [, aPermNum ]]) {|file| block} =
-&gt; nil=20
  <LI>IO.foreach(path, sepstring=3D$/) {|line| block}=20
  <LI>IO.readlines(path) =3D&gt; array </LI></UL>
<H5><A name=3D15>Mode Strings</A></H5>
<DL>
  <DT>r=20
  <DD>Read-only, starts at beginning of file (default mode).=20
  <DT>r+=20
  <DD>Read-write, starts at beginning of file.=20
  <DT>w=20
  <DD>Write-only, truncates existing file to zero length or creates a =
new file=20
  for writing.=20
  <DT>w+=20
  <DD>Read-write, truncates existing file to zero length or creates a =
new file=20
  for reading and writing.=20
  <DT>a=20
  <DD>Write-only, starts at end of file if file exists, otherwise =
creates a new=20
  file for writing.=20
  <DT>a+=20
  <DD>Read-write, starts at end of file if file exists, otherwise =
creates a new=20
  file for reading and writing.=20
  <DT>b=20
  <DD>(DOS/Windows only) Binary file mode (may appear with any of the =
key=20
  letters listed above). </DD></DL>
<H3><A name=3D16>Variables</A></H3><PRE>$global_variable
@@class_variable
@instance_variable
[OtherClass::]CONSTANT
local_variable</PRE>
<H3><A name=3D17>Pseudo variables</A></H3><PRE>self     the receiver of =
the current method
nil      the sole instance of the Class NilClass(represents false)
true     the sole instance of the Class TrueClass(typical true value)
false    the sole instance of the Class FalseClass(represents false)
__FILE__ the current source file name.
__LINE__ the current line number in the source file.</PRE>
<H3><A name=3D18>Pre-defined variables</A></H3><PRE>$!         The =
exception information message set by 'raise'.
$@         Array of backtrace of the last exception thrown.
$&amp;         The string matched by the last successful pattern match =
in this scope.
$`         The string to the left  of the last successful match.
$'         The string to the right of the last successful match.
$+         The last bracket matched by the last successful match.
$1         The Nth group of the last successful match. May be &gt; 1.
$~         The information about the last match in the current scope.
$=3D         The flag for case insensitive, nil by default.
$/         The input record separator, newline by default.
$\         The output record separator for the print and IO#write. =
Default is nil.
$,         The output field separator for the print and Array#join.
$;         The default separator for String#split.
$.         The current input line number of the last file that was read.
$&lt;         The virtual concatenation file of the files given on =
command line.
$&gt;         The default output for print, printf. $stdout by default.
$_         The last input line of string by gets or readline.
$0         Contains the name of the script being executed. May be =
assignable.
$*         Command line arguments given for the script sans args.
$$         The process number of the Ruby running this script.
$?         The status of the last executed child process.
$:         Load path for scripts and binary modules by load or require.
$"         The array contains the module names loaded by require.
$DEBUG     The status of the -d switch.
$FILENAME  Current input file from $&lt;. Same as $&lt;.filename.
$LOAD_PATH The alias to the $:.
$stderr    The current standard error output.
$stdin     The current standard input.
$stdout    The current standard output.
$VERBOSE   The verbose flag, which is set by the -v switch.
$-0        The alias to $/.
$-a        True if option -a is set. Read-only variable.
$-d        The alias to $DEBUG.
$-F        The alias to $;.
$-i        In in-place-edit mode, this variable holds the extension, =
otherwise nil.
$-I        The alias to $:.
$-l        True if option -l is set. Read-only variable.
$-p        True if option -p is set. Read-only variable.
$-v        The alias to $VERBOSE.
$-w        True if option -w is set.</PRE>
<H3><A name=3D19>Pre-defined global constants</A></H3><PRE>TRUE          =
    The typical true value.
FALSE             The false itself.
NIL               The nil itself.
STDIN             The standard input. The default value for $stdin.
STDOUT            The standard output. The default value for $stdout.
STDERR            The standard error output. The default value for =
$stderr.
ENV               The hash contains current environment variables.
ARGF              The alias to the $&lt;.
ARGV              The alias to the $*.
DATA              The file object of the script, pointing just after =
__END__.
RUBY_VERSION      The ruby version string (VERSION was deprecated).
RUBY_RELEASE_DATE The release date string.
RUBY_PLATFORM     The platform identifier.</PRE>
<H3><A name=3D20>Expressions</A></H3>
<H4><A name=3D21>Terms</A></H4>
<P>Terms are expressions that may be a basic type (listed above), a =
shell=20
command, variable reference, constant reference, or method =
invocation.</P>
<H4><A name=3D22>Operators and Precedence</A></H4><PRE>(Top to bottom)
:: .
[]
**
-(unary) +(unary) ! ~
*  /  %
+  -
&lt;&lt;  &gt;&gt;
&amp;
|  ^
&gt;  &gt;=3D  &lt;  &lt;=3D
&lt;=3D&gt; =3D=3D =3D=3D=3D !=3D =3D~ !~
&amp;&amp;
||
.. ...
=3D(+=3D, -=3D...)
not
and or</PRE>
<P>All of the above are just methods except these:</P><PRE>=3D, ::, ., =
.., ..., !, not, &amp;&amp;, and, ||, or, !=3D, !~</PRE>
<P>In addition, assignment operators(+=3D etc.) are not =
user-definable.</P>
<H4><A name=3D23>Control Expressions</A></H4><PRE><DIV style=3D"FLOAT: =
right">
<SCRIPT type=3Dtext/javascript><!--=0A=
google_ad_client =3D "pub-2178088302342288";=0A=
google_ad_width =3D 120;=0A=
google_ad_height =3D 600;=0A=
google_ad_format =3D "120x600_as";=0A=
google_ad_type =3D "text";=0A=
google_ad_channel =3D"2870910990";=0A=
google_color_border =3D "000000";=0A=
google_color_bg =3D "F0F0F0";=0A=
google_color_link =3D "0000FF";=0A=
google_color_text =3D "000000";=0A=
google_color_url =3D "008000";=0A=
//--></SCRIPT>
<SCRIPT src=3D"" type=3Dtext/javascript>=0A=
</SCRIPT></DIV></PRE><PRE>if bool-expr [then]
  body
elsif bool-expr [then]
  body
else
  body
end</PRE><PRE>unless bool-expr [then]
  body
else
  body
end</PRE><PRE>expr if     bool-expr
expr unless bool-expr</PRE><PRE>case target-expr
  when comparison [, comparison]... [then]
    body
  when comparison [, comparison]... [then]
    body
  ...
[else
  body]
end</PRE>
<P>(comparisons may be regexen)</P><PRE>loop do
  body
end</PRE><PRE>while bool-expr [do]
 body
end</PRE><PRE>until bool-expr [do]
 body
end</PRE><PRE>begin
 body
end while bool-expr</PRE><PRE>begin
 body
end until bool-expr</PRE><PRE>for name[, name]... in expr [do]
  body
end</PRE><PRE>expr.each do | name[, name]... |
  body
end</PRE><PRE>expr while bool-expr
expr until bool-expr</PRE>
<UL>
  <LI>break terminates loop immediately.=20
  <LI>redo immediately repeats w/o rerunning the condition.=20
  <LI>next starts the next iteration through the loop.=20
  <LI>retry restarts the loop, rerunning the condition. </LI></UL>
<H3><A name=3D24>Invoking a Method</A></H3>
<P>Nearly everything available in a method invocation is optional, =
consequently=20
the syntax is very difficult to follow. Here are some examples:</P>
<UL>
  <LI>method=20
  <LI>obj.method=20
  <LI>Class::method=20
  <LI>method(key1 =3D&gt; val1, key2 =3D&gt; val2)=20
  <UL>
    <LI>is <B>one</B> argument for def method(hash_arg) ! </LI></UL>
  <LI>method(arg1, *[arg2, arg3]) becomes: method(arg1, arg2, arg3)=20
  <LI>as ugly as you want it to be:=20
  <UL>
    <LI>method(arg1, key1 =3D&gt; val1, key2 =3D&gt; val2, *splat_arg) =
#{ block }=20
    </LI></UL></LI></UL><PRE>invocation :=3D [receiver ('::' | '.')] =
name [ parameters ] [ block ]
parameters :=3D ( [param]* [, hashlist] [*array] [&amp;aProc] )
block      :=3D { blockbody } | do blockbody end </PRE>
<H3><A name=3D25>Defining a Class</A></H3>
<P>Class names begin w/ capital character.</P><PRE>class Identifier =
[&lt; superclass ]
  expr..
end</PRE><PRE># singleton classes, add methods to a single instance
class &lt;&lt; obj
  expr..
end</PRE>
<H3><A name=3D26>Defining a Module</A></H3><PRE>module Identifier
  expr..
end</PRE>
<H3><A name=3D27>Defining a Method</A></H3><PRE>def =
method_name(arg_list, *list_expr, &amp;block_expr)
  expr..
end</PRE><PRE># singleton method
def expr.identifier(arg_list, *list_expr, &amp;block_expr)
  expr..
end</PRE>
<UL>
  <LI>All items of the arg list, including parens, are optional.=20
  <LI>Arguments may have default values (name=3Dexpr).=20
  <LI>Method_name may be operators (see above).=20
  <LI>The method definitions can not be nested.=20
  <LI>Methods may override operators: .., |, ^, &amp;, &lt;=3D&gt;, =
=3D=3D, =3D=3D=3D, =3D~,=20
  &gt;, &gt;=3D, &lt;, &lt;=3D, +, -, *, /, %, **, &lt;&lt;, &gt;&gt;, =
~, +@, -@,=20
  [], []=3D (2 args) </LI></UL>
<H4><A name=3D28>Access Restriction</A></H4>
<UL>
  <LI>public - totally accessible.=20
  <LI>protected - accessible only by instances of class and direct =
descendants.=20
  Even through hasA relationships. (see below)=20
  <LI>private - accessible only by instances of class (must be called =
nekkid no=20
  "self." or anything else). </LI></UL>
<UL>
  <LI>Restriction used w/o arguments set the default access control.=20
  <LI>Used with arguments, sets the access of the named methods and =
constants.=20
  </LI></UL><PRE>class A
  protected
  def protected_method
    # nothing
  end
end
class B &lt; A
  public
  def test_protected
    myA =3D A.new
    myA.protected_method
  end
end
b =3D B.new.test_protected</PRE>
<H4><A name=3D29>Accessors</A></H4>
<P>Class Module provides the following utility methods:</P>
<DL>
  <DT>attr_reader &lt;attribute&gt;[, &lt;attribute&gt;]...=20
  <DD>Creates a read-only accessor for each &lt;attribute&gt;.=20
  <DT>attr_writer &lt;attribute&gt;[, &lt;attribute&gt;]...=20
  <DD>Creates a write-only accessor for each &lt;attribute&gt;.=20
  <DT>attr &lt;attribute&gt; [, &lt;writable&gt;]=20
  <DD>Equivalent to "attr_reader &lt;attribute&gt;; attr_writer=20
  &lt;attribute&gt; if &lt;writable&gt;"=20
  <DT>attr_accessor &lt;attribute&gt;[, &lt;attribute&gt;]...=20
  <DD>Equivalent to "attr &lt;attribute&gt;, TRUE" for each argument. =
</DD></DL>
<H3><A name=3D30>Aliasing</A></H3><PRE>alias        :new  :old
alias_method :new, :old</PRE>
<P>Creates a new reference to whatever old referred to. old can be any =
existing=20
method, operator, global. It may not be a local, instance, constant, or =
class=20
variable.</P>
<H3><A name=3D31>Blocks, Closures, and Procs</A></H3>
<H4><A name=3D32>Blocks/Closures</A></H4>
<UL>
  <LI>blocks must follow a method invocation: </LI></UL><PRE>invocation =
do ... end
invocation { ... }</PRE>
<UL>
  <LI>Blocks remember their variable context, and are full closures.=20
  <LI>Blocks are invoked via yield and may be passed arguments.=20
  <LI>Brace form has higher precedence and will bind to the last =
parameter if=20
  invocation made w/o parens.=20
  <LI>do/end form has lower precedence and will bind to the invocation =
even=20
  without parens. </LI></UL>
<H4><A name=3D33>Proc Objects</A></H4>
<P>Created via:</P>
<UL>
  <LI>Kernel#proc=20
  <LI>Proc#new=20
  <LI>By invoking a method w/ a block argument. </LI></UL>
<P>See class Proc for more information.</P>
<H3><A name=3D34>Exceptions, Catch, and Throw</A></H3>
<UL>
  <LI>Exception=20
  <UL>
    <LI>NoMemoryError=20
    <LI>ScriptError=20
    <UL>
      <LI>LoadError=20
      <LI>NotImplementedError=20
      <LI>SyntaxError </LI></UL>
    <LI>SignalException=20
    <UL>
      <LI>Interrupt </LI></UL>
    <LI>StandardError (default for rescue)=20
    <UL>
      <LI>ArgumentError=20
      <LI>IOError=20
      <UL>
        <LI>EOFError </LI></UL>
      <LI>IndexError=20
      <LI>LocalJumpError=20
      <LI>NameError=20
      <UL>
        <LI>NoMethodError </LI></UL>
      <LI>RangeError=20
      <UL>
        <LI>FloatDomainError </LI></UL>
      <LI>RegexpError=20
      <LI>RuntimeError (default for raise)=20
      <LI>SecurityError=20
      <LI>SystemCallError=20
      <UL>
        <LI>Errno::* </LI></UL>
      <LI>SystemStackError=20
      <LI>ThreadError=20
      <LI>TypeError=20
      <LI>ZeroDivisionError </LI></UL>
    <LI>SystemExit=20
    <LI>fatal </LI></UL></LI></UL>
<H4><A name=3D35>Raising and Rescuing</A></H4><PRE>raise =
ExceptionClass[, "message"]</PRE><PRE>begin
  expr..
[rescue [error_type [=3D&gt; var],..]
  expr..]..
[else
  expr..]
[ensure
  expr..]
end</PRE>
<H4><A name=3D36>Catch and Throw</A></H4>
<UL>
  <LI>catch (:label) do ... end=20
  <LI>throw :label jumps back to matching catch and terminates the =
block.=20
  <LI>+ can be external to catch, but has to be reached via calling =
scope.=20
  <LI>+ Hardly ever needed. </LI></UL>
<H2><A name=3D37>Standard Library</A></H2>
<P>Ruby comes with an extensive library of classes and modules. Some are =

built-in, and some are part of the standard library. You can distinguish =
the two=20
by the fact that the built-in classes are in fact, built-in. There are =
no dot-rb=20
files for them.</P>
<H3><A name=3D38>Built-in Library</A></H3>
<H4><A name=3D39>Class Hierarchy</A></H4>
<UL>
  <LI>Object=20
  <UL>
    <LI>Hash=20
    <LI>Symbol=20
    <LI>IO=20
    <UL>
      <LI>File </LI></UL>
    <LI>Continuation=20
    <LI>File::Stat=20
    <LI>Data=20
    <LI>NilClass=20
    <LI>Exception (see tree above)=20
    <LI>Array=20
    <LI>Proc=20
    <LI>String=20
    <LI>Numeric=20
    <UL>
      <LI>Float=20
      <LI>Integer=20
      <UL>
        <LI>Bignum=20
        <LI>Fixnum </LI></UL></LI></UL>
    <LI>Regexp=20
    <LI>Thread=20
    <LI>Module=20
    <UL>
      <LI>Class </LI></UL>
    <LI>ThreadGroup=20
    <LI>Method=20
    <UL>
      <LI>UnboundMethod </LI></UL>
    <LI>Struct=20
    <UL>
      <LI>Struct::Tms </LI></UL>
    <LI>TrueClass=20
    <LI>Time=20
    <LI>Dir=20
    <LI>Binding=20
    <LI>Range=20
    <LI>MatchData=20
    <LI>FalseClass </LI></UL></LI></UL>
<H4><A name=3D40>Modules</A></H4>
<UL>
  <LI>Comparable=20
  <LI>Enumerable=20
  <LI>Errno=20
  <LI>FileTest=20
  <LI>GC=20
  <LI>Kernel=20
  <LI>Marshal=20
  <LI>Math=20
  <LI>ObjectSpace=20
  <LI>Precision=20
  <LI>Process </LI></UL>
<H3><A name=3D41>Standard Library</A></H3>
<P>The essentials:</P>
<UL>
  <LI>benchmark.rb a simple benchmarking utility=20
  <LI>cgi-lib.rb decode CGI data - simpler than cgi.rb=20
  <LI>cgi.rb CGI interaction=20
  <LI>date.rb date object (compatible)=20
  <LI>debug.rb ruby debugger=20
  <LI>delegate.rb delegate messages to other object=20
  <LI>English.rb access global variables by english names=20
  <LI>fileutils.rb file utility methods for copying, moving, removing, =
etc.=20
  <LI>find.rb traverse directory tree=20
  <LI>jcode.rb UTF-8 and Japanese String helpers (replaces String =
methods)=20
  <LI>net/*.rb Networking classes of all kinds=20
  <LI>observer.rb observer design pattern library (provides Observable)=20
  <LI>open-uri.rb good wrapper for net/http, net/https and net/ftp=20
  <LI>open3.rb open subprocess connection stdin/stdout/stderr=20
  <LI>ostruct.rb python style object (freeform assignment to instance =
vars)=20
  <LI>parsearg.rb argument parser using getopts=20
  <LI>pp prettier debugging output, 'p' on steroids.=20
  <LI>profile.rb ruby profiler - find that slow code!=20
  <LI>pstore.rb persistent object strage using marshal=20
  <LI>rexml/*.rb XML toolkit=20
  <LI>singleton.rb singleton design pattern library=20
  <LI>stringio lets you use an IO attached to a string.=20
  <LI>tempfile.rb temporary file that automatically removed=20
  <LI>test/unit unit testing framework=20
  <LI>time.rb extension to Time class with a lot of converters=20
  <LI>tracer.rb execution tracer=20
  <LI>webrick Fairly spiffy web server=20
  <LI>yaml alternative readable serialization format </LI></UL>
<H2><A name=3D42>Tools</A></H2>
<H3><A name=3D43>ruby</A></H3>
<H4><A name=3D44>Command Line Options</A></H4><PRE>-0[octal]       =
specify record separator (\0, if no argument).
-a              autosplit mode with -n or -p (splits $_ into $F).
-c              check syntax only.
-Cdirectory     cd to directory, before executing your script.
--copyright     print the copyright and exit.
-d              set debugging flags (set $DEBUG to true).
-e 'command'    one line of script. Several -e's allowed.
-F regexp       split() pattern for autosplit (-a).
-h		  prints summary of the options.
-i[extension]   edit ARGV files in place (make backup if extension =
supplied).
-Idirectory     specify $LOAD_PATH directory (may be used more than =
once).
-Kkcode         specifies KANJI (Japanese) code-set.
-l              enable line ending processing.
-n              assume 'while gets(); ... end' loop around your script.
-p              assume loop like -n but print line also like sed.
-rlibrary       require the library, before executing your script.
-s              enable some switch parsing for switches after script =
name.
-S              look for the script using PATH environment variable.
-T[level]       turn on tainting checks.
-v              print version number, then turn on verbose mode.
--version       print the version and exit.
-w              turn warnings on for your script.
-x[directory]   strip off text before #! line and perhaps cd to =
directory.
-X directory    causes Ruby to switch to the directory.
-y              turns on compiler debug mode.</PRE>
<H4><A name=3D45>Environment Variables</A></H4><PRE>DLN_LIBRARY_PATH =
Search path for dynamically loaded modules.
RUBYLIB          Additional search paths.
RUBYLIB_PREFIX   Add this prefix to each item in RUBYLIB. Windows only.
RUBYOPT          Additional command line options.
RUBYPATH         With -S, searches PATH, or this value for ruby =
programs.
RUBYSHELL        Shell to use when spawning.</PRE>
<H3><A name=3D46>irb</A></H3><PRE>irb [options] [script [args]]</PRE>
<P>The essential options are:</P><PRE>-d              Sets $DEBUG to =
true. Same as "ruby -d ..."
-f              Prevents the loading of ~/.irb.rc.
-h              Get a full list of options.
-m              Math mode. Overrides --inspect. Loads "mathn.rb".
-r module       Loads a module. Same as "ruby -r module ..."
-v              Prints the version and exits.
--inf-ruby-mode Turns on emacs support and turns off readline.
--inspect       Turns on inspect mode. Default.
--noinspect     Turns off inspect mode.
--noprompt      Turns off the prompt.
--noreadline    Turns off readline support.
--prompt        Sets to one of 'default', 'xmp', 'simple', or =
'inf-ruby'.
--readline      Turns on readline support. Default.
--tracer        Turns on trace mode.</PRE>
<P>Besides arbitrary ruby commands, the special commands =
are:</P><PRE>exit                  exits the current session, or the =
program
fork block            forks and runs the given block
cb args               changes to a secified binding
source file           loads a ruby file into the session
irb [obj]             starts a new session, with obj as self, if =
specified
conf[.key[=3D val]]     access the configuration of the session
jobs                  lists the known sessions
fg session            switches to the specifed session
kill session          kills a specified session</PRE>
<P>Session may be specified via session#, thread-id, obj, or self.</P>
<H3><A name=3D47>xmp</A></H3><PRE>require "irb/xmp"
xmp "something to eval" # or:
x =3D XMP.new
x.puts "something to eval"</PRE>
<H3><A name=3D48>ruby-mode</A></H3>
<P>TODO: I don't have a freakin clue how to use the inferior ruby =
thing... I=20
always fire up a shell in emacs... DOH!</P>
<H3><A name=3D49>Debugger</A></H3>
<P>To invoke the debugger:</P><PRE>ruby -r debug ...</PRE>
<P>To use the debugger:</P><PRE>b[reak] [file:|class:]&lt;line|method
b[reak] [class.]&lt;line|method
                           set breakpoint to some position
wat[ch] expression         set watchpoint to some expression
cat[ch] exception          set catchpoint to an exception
b[reak]                    list breakpoints
cat[ch]                    show catchpoint
del[ete][ nnn]             delete some or all breakpoints
disp[lay] expression       add expression into display expression list
undisp[lay][ nnn]          delete one particular or all display =
expressions
c[ont]                     run until program ends or hit breakpoint
s[tep][ nnn]               step (into methods) one line or till line nnn
n[ext][ nnn]               go over one line or till line nnn
w[here]                    display frames
f[rame]                    alias for where
l[ist][ (-|nn-mm)]         list program, - lists backwards
                           nn-mm lists given lines
up[ nn]                    move to higher frame
down[ nn]                  move to lower frame
fin[ish]                   return to outer frame
tr[ace] (on|off)           set trace mode of current thread
tr[ace] (on|off) all       set trace mode of all threads
q[uit]                     exit from debugger
v[ar] g[lobal]             show global variables
v[ar] l[ocal]              show local variables
v[ar] i[nstance] object    show instance variables of object
v[ar] c[onst] object       show constants of object
m[ethod] i[nstance] obj    show methods of object
m[ethod] class|module      show instance methods of class or module
th[read] l[ist]            list all threads
th[read] c[ur[rent]]       show current thread
th[read] [sw[itch]] nnn    switch thread context to nnn
th[read] stop nnn          stop thread nnn
th[read] resume nnn        resume thread nnn
p expression               evaluate expression and print its value
h[elp]                     print this help
everything else            evaluate
empty                      repeats the last command</PRE>
<H3><A name=3D50>rdoc</A></H3><PRE>=3Dbegin
the everything between a line beginning with `=3Dbegin' and
that with `=3Dend' will be skipped by the interpreter.
=3Dend</PRE>
<P>FIX: there is a lot more to rdoc.</P>
<H2><A name=3D51>Mindshare, Idiom and Patterns</A></H2>
<H3><A name=3D52>Object Design</A></H3>
<H4><A name=3D53>Visitor Pattern</A></H4>
<P>By defining the method #each and including Enumerable, you get to use =
all the=20
methods in Enumerable:</P><PRE>class Mailbox
  include Enumerable
  # ...
  def each
    @mail.each do
       # ...
       yield
    end
  end
end</PRE>
<H4><A name=3D54>Class SimpleDelegator, DelegateClass</A></H4><PRE>foo =
=3D Object.new
foo2 =3D SimpleDelegator.new(foo)
foo.hash =3D=3D foo2.hash # =3D&gt; false
Foo =3D DelegateClass(Array)
class ExtArray&lt;DelegateClass(Array)
  ...
end</PRE>
<H4><A name=3D55>Module Observer</A></H4><PRE>monitor.add_observer(self)
...
def update
  ...
  notify_observers(data, ...)
end</PRE>
<H4><A name=3D56>Module Singleton</A></H4><PRE>class Klass
  include Singleton
  # ...
end

a, b =3D Klass.instance, Klass.instance
a =3D=3D b # =3D&gt; true
a.new  # raises NoMethodError</PRE>
<H3><A name=3D57>Other Third-party Libraries</A></H3>
<H4><A name=3D58>Racc</A></H4>
<UL>
  <LI>See <A href=3D"http://i.loveruby.net/en/man/racc/">i.loveruby.net =
/en /man=20
  /racc</A> </LI></UL>
<H4><A name=3D59>Test::Unit</A></H4>
<UL>
  <LI>assert(boolean, message=3Dnil)=20
  <LI>assert_block(message=3D"assert_block failed.") do ... end=20
  <LI>assert_equal(expected, actual, message=3Dnil)=20
  <LI>assert_in_delta(expected_float, actual_float, delta, message=3D"") =

  <LI>assert_instance_of(klass, object, message=3D"")=20
  <LI>assert_kind_of(klass, object, message=3D"")=20
  <LI>assert_match(pattern, string, message=3D"")=20
  <LI>assert_nil(object, message=3D"")=20
  <LI>assert_no_match(regexp, string, message=3D"")=20
  <LI>assert_not_equal(expected, actual, message=3D"")=20
  <LI>assert_not_nil(object, message=3D"")=20
  <LI>assert_not_same(expected, actual, message=3D"")=20
  <LI>assert_nothing_raised(*args)=20
  <LI>assert_nothing_thrown(message=3D"") do ... end=20
  <LI>assert_operator(object1, operator, object2, message=3D"")=20
  <LI>assert_raises(expected_exception_klass, message=3D"") do ... end=20
  <LI>assert_respond_to(object, method, message=3D"")=20
  <LI>assert_same(expected, actual, message=3D"")=20
  <LI>assert_send(send_array, message=3D"")=20
  <LI>assert_throws(expected_symbol, message=3D"") do ... end=20
  <LI>flunk(message=3D"Flunked") </LI></UL><PRE><SCRIPT =
type=3Dtext/javascript><!--=0A=
google_ad_client =3D "pub-2178088302342288";=0A=
google_ad_width =3D 468;=0A=
google_ad_height =3D 60;=0A=
google_ad_format =3D "468x60_as";=0A=
google_ad_type =3D "text";=0A=
google_ad_channel =3D"2870910990";=0A=
google_color_border =3D "000000";=0A=
google_color_bg =3D "F0F0F0";=0A=
google_color_link =3D "0000FF";=0A=
google_color_text =3D "000000";=0A=
google_color_url =3D "008000";=0A=
//--></SCRIPT>
<SCRIPT src=3D"" type=3Dtext/javascript>=0A=
</SCRIPT></PRE>
<HR>
<PRE>Original URL: www.zenspider.com/Languages/Ruby/QuickRef.html
$Author: ryand $
$Date: 2007/09/03 $
$Revision: #48 $</PRE>
<HR class=3Dthick>

<P class=3Dnavbar><A =
href=3D"http://www.zenspider.com/SiteMap.html">Sitemap</A> | <A=20
href=3D"http://www.zenspider.com/Search.html"><EM>Search</EM></A> || <A=20
href=3D"http://www.zenspider.com/index.html">Zen Spider Website</A> / <A =

href=3D"http://www.zenspider.com/Languages/index.html">The Language =
Freak</A> / <A=20
href=3D"http://www.zenspider.com/Languages/Ruby/index.html">Ruby</A> / =
Ruby=20
QuickRef</P>
<DIV class=3Dfooter><A=20
href=3D"http://www.zenspider.com/Website/Philosophy.html">"More matter, =
with less=20
art" - Gertrude, Hamlet.</A><BR>Copyright =C2=A9 1997-2004 <A=20
href=3D"http://www.zenspider.com/Contact.html">Ryan Davis</A> &amp; <A=20
href=3D"http://www.zenspider.com/">Zen Spider Software</A>. All Rights =
Reserved.=20
<BR>Generated: 2007-09-03 22:15:01</DIV>
<SCRIPT src=3D"http://www.google-analytics.com/urchin.js"=20
type=3Dtext/javascript>=0A=
</SCRIPT>

<SCRIPT type=3Dtext/javascript>=0A=
_uacct =3D "UA-543579-2";=0A=
urchinTracker();=0A=
</SCRIPT>
</BODY></HTML>

------=_NextPart_000_0000_01C81CCA.CCB00B80
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.zenspider.com/style.css

BODY {
	FONT-SIZE: smaller; MARGIN: 1em; COLOR: black; FONT-FAMILY: serif; =
BACKGROUND-COLOR: white; TEXT-ALIGN: justify
}
H1 {
	FONT-WEIGHT: normal; MARGIN: 0em; COLOR: #639; FONT-FAMILY: sans-serif
}
H2 {
	FONT-WEIGHT: normal; MARGIN: 0em; COLOR: #639; FONT-FAMILY: sans-serif
}
H3 {
	FONT-WEIGHT: normal; MARGIN: 0em; COLOR: #639; FONT-FAMILY: sans-serif
}
H4 {
	FONT-WEIGHT: normal; MARGIN: 0em; COLOR: #639; FONT-FAMILY: sans-serif
}
H5 {
	FONT-WEIGHT: normal; MARGIN: 0em; COLOR: #639; FONT-FAMILY: sans-serif
}
H6 {
	FONT-WEIGHT: normal; MARGIN: 0em; COLOR: #639; FONT-FAMILY: sans-serif
}
A {
	TEXT-DECORATION: none
}
A:hover {
	TEXT-DECORATION: underline
}
HR {
	BORDER-TOP: purple 3px solid; MARGIN: 0em; COLOR: #609
}
H1 + H2 {
	MARGIN-LEFT: 1em; COLOR: #399
}
P {
	MARGIN-LEFT: 2em; MARGIN-RIGHT: 2em
}
TABLE {
	FONT-SIZE: smaller; MARGIN-LEFT: 3em; MARGIN-RIGHT: 3em
}
PRE {
	MARGIN-LEFT: 3em; MARGIN-RIGHT: 3em
}
.navbar {
	MARGIN-LEFT: 0em
}
.footer {
	FONT-SIZE: smaller; TEXT-ALIGN: center
}
.r {
	COLOR: red
}
.y {
	COLOR: #ff9c00
}
.g {
	COLOR: green
}
.calendar .eventlist {
	MARGIN-LEFT: 0px
}
.calendar .eventlist UL {
	PADDING-LEFT: 0em; LIST-STYLE-TYPE: none
}
.calendar .eventlist UL UL {
	PADDING-LEFT: 1em; LIST-STYLE-TYPE: none
}
.calendar {
	FONT-SIZE: medium
}
.calendar .view {
	MARGIN: 0px; BORDER-COLLAPSE: collapse
}
.calendar .title {
	BORDER-RIGHT: #c33 1px solid; BORDER-TOP: #c33 1px solid; BORDER-LEFT: =
#c33 1px solid; BORDER-BOTTOM: #c33 1px solid
}
.calendar .weektitle {
	BORDER-RIGHT: #c33 1px solid; BORDER-TOP: #c33 1px solid; BORDER-LEFT: =
#c33 1px solid; BORDER-BOTTOM: #c33 1px solid
}
.calendar .weektitle TH {
	PADDING-RIGHT: 1px; BORDER-TOP: white 1px solid; PADDING-LEFT: 1px; =
PADDING-BOTTOM: 0px; PADDING-TOP: 0px
}
.calendar .view TD {
	BORDER-RIGHT: #c33 1px dotted; BORDER-TOP: #c33 1px dotted; =
BORDER-LEFT: #c33 1px dotted; BORDER-BOTTOM: #c33 1px dotted
}
.calendar .days {
	BORDER-RIGHT: #c33 1px solid; BORDER-TOP: #c33 1px solid; =
VERTICAL-ALIGN: top; BORDER-LEFT: #c33 1px solid; BORDER-BOTTOM: #c33 =
1px solid; TEXT-ALIGN: right
}
.calendar .event {
	BACKGROUND: #900; COLOR: white; TEXT-ALIGN: center
}
.sat {
	BACKGROUND-COLOR: #f99
}
.sun {
	BACKGROUND-COLOR: #f99
}
.title {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; COLOR: white; BACKGROUND-COLOR: #c33; BORDER-RIGHT-WIDTH: 0px
}
.weektitle {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; COLOR: white; BACKGROUND-COLOR: #c33; BORDER-RIGHT-WIDTH: 0px
}
.weektitle .sat {
	COLOR: white; BACKGROUND-COLOR: #c33
}
.weektitle .sun {
	COLOR: white; BACKGROUND-COLOR: #c33
}
.calendar .eventlist {
	VERTICAL-ALIGN: top
}

------=_NextPart_000_0000_01C81CCA.CCB00B80
Content-Type: application/x-js
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.google-analytics.com/urchin.js

//-- Google Analytics Urchin Module=0A=
//-- Copyright 2007 Google, All Rights Reserved.=0A=
=0A=
//-- Urchin On Demand Settings ONLY=0A=
var _uacct=3D"";			// set up the Urchin Account=0A=
var _userv=3D1;			// service mode (0=3Dlocal,1=3Dremote,2=3Dboth)=0A=
=0A=
//-- UTM User Settings=0A=
var _ufsc=3D1;			// set client info flag (1=3Don|0=3Doff)=0A=
var _udn=3D"auto";		// (auto|none|domain) set the domain name for cookies=0A=
var _uhash=3D"on";		// (on|off) unique domain hash for cookies=0A=
var _utimeout=3D"1800";   	// set the inactive session timeout in seconds=0A=
var _ugifpath=3D"/__utm.gif";	// set the web path to the __utm.gif file=0A=
var _utsp=3D"|";			// transaction field separator=0A=
var _uflash=3D1;			// set flash version detect option (1=3Don|0=3Doff)=0A=
var _utitle=3D1;			// set the document title detect option =
(1=3Don|0=3Doff)=0A=
var _ulink=3D0;			// enable linker functionality (1=3Don|0=3Doff)=0A=
var _uanchor=3D0;			// enable use of anchors for campaign =
(1=3Don|0=3Doff)=0A=
var _utcp=3D"/";			// the cookie path for tracking=0A=
var _usample=3D100;		// The sampling % of visitors to track (1-100).=0A=
=0A=
//-- UTM Campaign Tracking Settings=0A=
var _uctm=3D1;			// set campaign tracking module (1=3Don|0=3Doff)=0A=
var _ucto=3D"15768000";		// set timeout in seconds (6 month default)=0A=
var _uccn=3D"utm_campaign";	// name=0A=
var _ucmd=3D"utm_medium";		// medium (cpc|cpm|link|email|organic)=0A=
var _ucsr=3D"utm_source";		// source=0A=
var _uctr=3D"utm_term";		// term/keyword=0A=
var _ucct=3D"utm_content";	// content=0A=
var _ucid=3D"utm_id";		// id number=0A=
var _ucno=3D"utm_nooverride";	// don't override=0A=
=0A=
//-- Auto/Organic Sources and Keywords=0A=
var _uOsr=3Dnew Array();=0A=
var _uOkw=3Dnew Array();=0A=
_uOsr[0]=3D"google";	_uOkw[0]=3D"q";=0A=
_uOsr[1]=3D"yahoo";	_uOkw[1]=3D"p";=0A=
_uOsr[2]=3D"msn";		_uOkw[2]=3D"q";=0A=
_uOsr[3]=3D"aol";		_uOkw[3]=3D"query";=0A=
_uOsr[4]=3D"aol";		_uOkw[4]=3D"encquery";=0A=
_uOsr[5]=3D"lycos";	_uOkw[5]=3D"query";=0A=
_uOsr[6]=3D"ask";		_uOkw[6]=3D"q";=0A=
_uOsr[7]=3D"altavista";	_uOkw[7]=3D"q";=0A=
_uOsr[8]=3D"netscape";	_uOkw[8]=3D"query";=0A=
_uOsr[9]=3D"cnn";	_uOkw[9]=3D"query";=0A=
_uOsr[10]=3D"looksmart";	_uOkw[10]=3D"qt";=0A=
_uOsr[11]=3D"about";	_uOkw[11]=3D"terms";=0A=
_uOsr[12]=3D"mamma";	_uOkw[12]=3D"query";=0A=
_uOsr[13]=3D"alltheweb";	_uOkw[13]=3D"q";=0A=
_uOsr[14]=3D"gigablast";	_uOkw[14]=3D"q";=0A=
_uOsr[15]=3D"voila";	_uOkw[15]=3D"rdata";=0A=
_uOsr[16]=3D"virgilio";	_uOkw[16]=3D"qs";=0A=
_uOsr[17]=3D"live";	_uOkw[17]=3D"q";=0A=
_uOsr[18]=3D"baidu";	_uOkw[18]=3D"wd";=0A=
_uOsr[19]=3D"alice";	_uOkw[19]=3D"qs";=0A=
_uOsr[20]=3D"yandex";	_uOkw[20]=3D"text";=0A=
_uOsr[21]=3D"najdi";	_uOkw[21]=3D"q";=0A=
_uOsr[22]=3D"aol";	_uOkw[22]=3D"q";=0A=
_uOsr[23]=3D"club-internet"; _uOkw[23]=3D"q";=0A=
_uOsr[24]=3D"mama";	_uOkw[24]=3D"query";=0A=
_uOsr[25]=3D"seznam";	_uOkw[25]=3D"q";=0A=
_uOsr[26]=3D"search";	_uOkw[26]=3D"q";=0A=
_uOsr[27]=3D"szukaj";	_uOkw[27]=3D"szukaj";=0A=
_uOsr[28]=3D"szukaj";	_uOkw[28]=3D"qt";=0A=
_uOsr[29]=3D"netsprint";	_uOkw[29]=3D"q";=0A=
_uOsr[30]=3D"google.interia";	_uOkw[30]=3D"q";=0A=
_uOsr[31]=3D"szukacz";	_uOkw[31]=3D"q";=0A=
_uOsr[32]=3D"yam";	_uOkw[32]=3D"k";=0A=
_uOsr[33]=3D"pchome";	_uOkw[33]=3D"q";=0A=
=0A=
=0A=
//-- Auto/Organic Keywords to Ignore=0A=
var _uOno=3Dnew Array();=0A=
//_uOno[0]=3D"urchin";=0A=
//_uOno[1]=3D"urchin.com";=0A=
//_uOno[2]=3D"www.urchin.com";=0A=
=0A=
//-- Referral domains to Ignore=0A=
var _uRno=3Dnew Array();=0A=
//_uRno[0]=3D".urchin.com";=0A=
=0A=
//-- **** Don't modify below this point ***=0A=
var =
_uff,_udh,_udt,_ubl=3D0,_udo=3D"",_uu,_ufns=3D0,_uns=3D0,_ur=3D"-",_ufno=3D=
0,_ust=3D0,_ubd=3Ddocument,_udl=3D_ubd.location,_udlh=3D"",_uwv=3D"1";=0A=
var _ugifpath2=3D"http://www.google-analytics.com/__utm.gif";=0A=
if (_udl.hash) _udlh=3D_udl.href.substring(_udl.href.indexOf('#'));=0A=
if (_udl.protocol=3D=3D"https:") =
_ugifpath2=3D"https://ssl.google-analytics.com/__utm.gif";=0A=
if (!_utcp || _utcp=3D=3D"") _utcp=3D"/";=0A=
function urchinTracker(page) {=0A=
 if (_udl.protocol=3D=3D"file:") return;=0A=
 if (_uff && (!page || page=3D=3D"")) return;=0A=
 var a,b,c,xx,v,z,k,x=3D"",s=3D"",f=3D0;=0A=
 var nx=3D" expires=3D"+_uNx()+";";=0A=
 var dc=3D_ubd.cookie;=0A=
 _udh=3D_uDomain();=0A=
 if (!_uVG()) return;=0A=
 _uu=3DMath.round(Math.random()*2147483647);=0A=
 _udt=3Dnew Date();=0A=
 _ust=3DMath.round(_udt.getTime()/1000);=0A=
 a=3Ddc.indexOf("__utma=3D"+_udh);=0A=
 b=3Ddc.indexOf("__utmb=3D"+_udh);=0A=
 c=3Ddc.indexOf("__utmc=3D"+_udh);=0A=
 if (_udn && _udn!=3D"") { _udo=3D" domain=3D"+_udn+";"; }=0A=
 if (_utimeout && _utimeout!=3D"") {=0A=
  x=3Dnew Date(_udt.getTime()+(_utimeout*1000));=0A=
  x=3D" expires=3D"+x.toGMTString()+";";=0A=
 }=0A=
 if (_ulink) {=0A=
  if (_uanchor && _udlh && _udlh!=3D"") s=3D_udlh+"&";=0A=
  s+=3D_udl.search;=0A=
  if(s && s!=3D"" && s.indexOf("__utma=3D")>=3D0) {=0A=
   if (!(_uIN(a=3D_uGC(s,"__utma=3D","&")))) a=3D"-";=0A=
   if (!(_uIN(b=3D_uGC(s,"__utmb=3D","&")))) b=3D"-";=0A=
   if (!(_uIN(c=3D_uGC(s,"__utmc=3D","&")))) c=3D"-";=0A=
   v=3D_uGC(s,"__utmv=3D","&");=0A=
   z=3D_uGC(s,"__utmz=3D","&");=0A=
   k=3D_uGC(s,"__utmk=3D","&");=0A=
   xx=3D_uGC(s,"__utmx=3D","&");=0A=
   if ((k*1) !=3D ((_uHash(a+b+c+xx+z+v)*1)+(_udh*1))) =
{_ubl=3D1;a=3D"-";b=3D"-";c=3D"-";xx=3D"-";z=3D"-";v=3D"-";}=0A=
   if (a!=3D"-" && b!=3D"-" && c!=3D"-") f=3D1;=0A=
   else if(a!=3D"-") f=3D2;=0A=
  }=0A=
 }=0A=
 if(f=3D=3D1) {=0A=
  _ubd.cookie=3D"__utma=3D"+a+"; path=3D"+_utcp+";"+nx+_udo;=0A=
  _ubd.cookie=3D"__utmb=3D"+b+"; path=3D"+_utcp+";"+x+_udo;=0A=
  _ubd.cookie=3D"__utmc=3D"+c+"; path=3D"+_utcp+";"+_udo;=0A=
 } else if (f=3D=3D2) {=0A=
  a=3D_uFixA(s,"&",_ust);=0A=
  _ubd.cookie=3D"__utma=3D"+a+"; path=3D"+_utcp+";"+nx+_udo;=0A=
  _ubd.cookie=3D"__utmb=3D"+_udh+"; path=3D"+_utcp+";"+x+_udo;=0A=
  _ubd.cookie=3D"__utmc=3D"+_udh+"; path=3D"+_utcp+";"+_udo;=0A=
  _ufns=3D1;=0A=
 } else if (a>=3D0 && b>=3D0 && c>=3D0) {=0A=
  _ubd.cookie=3D"__utmb=3D"+_udh+"; path=3D"+_utcp+";"+x+_udo;=0A=
 } else {=0A=
  if (a>=3D0) a=3D_uFixA(_ubd.cookie,";",_ust);=0A=
  else a=3D_udh+"."+_uu+"."+_ust+"."+_ust+"."+_ust+".1";=0A=
  _ubd.cookie=3D"__utma=3D"+a+"; path=3D"+_utcp+";"+nx+_udo;=0A=
  _ubd.cookie=3D"__utmb=3D"+_udh+"; path=3D"+_utcp+";"+x+_udo;=0A=
  _ubd.cookie=3D"__utmc=3D"+_udh+"; path=3D"+_utcp+";"+_udo;=0A=
  _ufns=3D1;=0A=
 }=0A=
 if (_ulink && xx && xx!=3D"" && xx!=3D"-") {=0A=
   xx=3D_uUES(xx);=0A=
   if (xx.indexOf(";")=3D=3D-1) _ubd.cookie=3D"__utmx=3D"+xx+"; =
path=3D"+_utcp+";"+nx+_udo;=0A=
 }=0A=
 if (_ulink && v && v!=3D"" && v!=3D"-") {=0A=
  v=3D_uUES(v);=0A=
  if (v.indexOf(";")=3D=3D-1) _ubd.cookie=3D"__utmv=3D"+v+"; =
path=3D"+_utcp+";"+nx+_udo;=0A=
 }=0A=
 _uInfo(page);=0A=
 _ufns=3D0;=0A=
 _ufno=3D0;=0A=
 if (!page || page=3D=3D"") _uff=3D1;=0A=
}=0A=
function _uInfo(page) {=0A=
 var p,s=3D"",dm=3D"",pg=3D_udl.pathname+_udl.search;=0A=
 if (page && page!=3D"") pg=3D_uES(page,1);=0A=
 _ur=3D_ubd.referrer;=0A=
 if (!_ur || _ur=3D=3D"") { _ur=3D"-"; }=0A=
 else {=0A=
  dm=3D_ubd.domain;=0A=
  if(_utcp && _utcp!=3D"/") dm+=3D_utcp;=0A=
  p=3D_ur.indexOf(dm);=0A=
  if ((p>=3D0) && (p<=3D8)) { _ur=3D"0"; }=0A=
  if (_ur.indexOf("[")=3D=3D0 && =
_ur.lastIndexOf("]")=3D=3D(_ur.length-1)) { _ur=3D"-"; }=0A=
 }=0A=
 s+=3D"&utmn=3D"+_uu;=0A=
 if (_ufsc) s+=3D_uBInfo();=0A=
 if (_uctm) s+=3D_uCInfo();=0A=
 if (_utitle && _ubd.title && _ubd.title!=3D"") =
s+=3D"&utmdt=3D"+_uES(_ubd.title);=0A=
 if (_udl.hostname && _udl.hostname!=3D"") =
s+=3D"&utmhn=3D"+_uES(_udl.hostname);=0A=
 s+=3D"&utmr=3D"+_ur;=0A=
 s+=3D"&utmp=3D"+pg;=0A=
 if ((_userv=3D=3D0 || _userv=3D=3D2) && _uSP()) {=0A=
  var i=3Dnew Image(1,1);=0A=
  i.src=3D_ugifpath+"?"+"utmwv=3D"+_uwv+s;=0A=
  i.onload=3Dfunction() {_uVoid();}=0A=
 }=0A=
 if ((_userv=3D=3D1 || _userv=3D=3D2) && _uSP()) {=0A=
  var i2=3Dnew Image(1,1);=0A=
  =
i2.src=3D_ugifpath2+"?"+"utmwv=3D"+_uwv+s+"&utmac=3D"+_uacct+"&utmcc=3D"+=
_uGCS();=0A=
  i2.onload=3Dfunction() { _uVoid(); }=0A=
 }=0A=
 return;=0A=
}=0A=
function _uVoid() { return; }=0A=
function _uCInfo() {=0A=
 if (!_ucto || _ucto=3D=3D"") { _ucto=3D"15768000"; }=0A=
 if (!_uVG()) return;=0A=
 var =
c=3D"",t=3D"-",t2=3D"-",t3=3D"-",o=3D0,cs=3D0,cn=3D0,i=3D0,z=3D"-",s=3D""=
;=0A=
 if (_uanchor && _udlh && _udlh!=3D"") s=3D_udlh+"&";=0A=
 s+=3D_udl.search;=0A=
 var x=3Dnew Date(_udt.getTime()+(_ucto*1000));=0A=
 var dc=3D_ubd.cookie;=0A=
 x=3D" expires=3D"+x.toGMTString()+";";=0A=
 if (_ulink && !_ubl) {=0A=
  z=3D_uUES(_uGC(s,"__utmz=3D","&"));=0A=
  if (z!=3D"-" && z.indexOf(";")=3D=3D-1) { =
_ubd.cookie=3D"__utmz=3D"+z+"; path=3D"+_utcp+";"+x+_udo; return ""; }=0A=
 }=0A=
 z=3Ddc.indexOf("__utmz=3D"+_udh);=0A=
 if (z>-1) { z=3D_uGC(dc,"__utmz=3D"+_udh,";"); }=0A=
 else { z=3D"-"; }=0A=
 t=3D_uGC(s,_ucid+"=3D","&");=0A=
 t2=3D_uGC(s,_ucsr+"=3D","&");=0A=
 t3=3D_uGC(s,"gclid=3D","&");=0A=
 if ((t!=3D"-" && t!=3D"") || (t2!=3D"-" && t2!=3D"") || (t3!=3D"-" && =
t3!=3D"")) {=0A=
  if (t!=3D"-" && t!=3D"") c+=3D"utmcid=3D"+_uEC(t);=0A=
  if (t2!=3D"-" && t2!=3D"") { if (c !=3D "") c+=3D"|"; =
c+=3D"utmcsr=3D"+_uEC(t2); }=0A=
  if (t3!=3D"-" && t3!=3D"") { if (c !=3D "") c+=3D"|"; =
c+=3D"utmgclid=3D"+_uEC(t3); }=0A=
  t=3D_uGC(s,_uccn+"=3D","&");=0A=
  if (t!=3D"-" && t!=3D"") c+=3D"|utmccn=3D"+_uEC(t);=0A=
  else c+=3D"|utmccn=3D(not+set)";=0A=
  t=3D_uGC(s,_ucmd+"=3D","&");=0A=
  if (t!=3D"-" && t!=3D"") c+=3D"|utmcmd=3D"+_uEC(t);=0A=
  else  c+=3D"|utmcmd=3D(not+set)";=0A=
  t=3D_uGC(s,_uctr+"=3D","&");=0A=
  if (t!=3D"-" && t!=3D"") c+=3D"|utmctr=3D"+_uEC(t);=0A=
  else { t=3D_uOrg(1); if (t!=3D"-" && t!=3D"") =
c+=3D"|utmctr=3D"+_uEC(t); }=0A=
  t=3D_uGC(s,_ucct+"=3D","&");=0A=
  if (t!=3D"-" && t!=3D"") c+=3D"|utmcct=3D"+_uEC(t);=0A=
  t=3D_uGC(s,_ucno+"=3D","&");=0A=
  if (t=3D=3D"1") o=3D1;=0A=
  if (z!=3D"-" && o=3D=3D1) return "";=0A=
 }=0A=
 if (c=3D=3D"-" || c=3D=3D"") { c=3D_uOrg(); if (z!=3D"-" && =
_ufno=3D=3D1)  return ""; }=0A=
 if (c=3D=3D"-" || c=3D=3D"") { if (_ufns=3D=3D1)  c=3D_uRef(); if =
(z!=3D"-" && _ufno=3D=3D1)  return ""; }=0A=
 if (c=3D=3D"-" || c=3D=3D"") {=0A=
  if (z=3D=3D"-" && _ufns=3D=3D1) { =
c=3D"utmccn=3D(direct)|utmcsr=3D(direct)|utmcmd=3D(none)"; }=0A=
  if (c=3D=3D"-" || c=3D=3D"") return "";=0A=
 }=0A=
 if (z!=3D"-") {=0A=
  i=3Dz.indexOf(".");=0A=
  if (i>-1) i=3Dz.indexOf(".",i+1);=0A=
  if (i>-1) i=3Dz.indexOf(".",i+1);=0A=
  if (i>-1) i=3Dz.indexOf(".",i+1);=0A=
  t=3Dz.substring(i+1,z.length);=0A=
  if (t.toLowerCase()=3D=3Dc.toLowerCase()) cs=3D1;=0A=
  t=3Dz.substring(0,i);=0A=
  if ((i=3Dt.lastIndexOf(".")) > -1) {=0A=
   t=3Dt.substring(i+1,t.length);=0A=
   cn=3D(t*1);=0A=
  }=0A=
 }=0A=
 if (cs=3D=3D0 || _ufns=3D=3D1) {=0A=
  t=3D_uGC(dc,"__utma=3D"+_udh,";");=0A=
  if ((i=3Dt.lastIndexOf(".")) > 9) {=0A=
   _uns=3Dt.substring(i+1,t.length);=0A=
   _uns=3D(_uns*1);=0A=
  }=0A=
  cn++;=0A=
  if (_uns=3D=3D0) _uns=3D1;=0A=
  _ubd.cookie=3D"__utmz=3D"+_udh+"."+_ust+"."+_uns+"."+cn+"."+c+"; =
path=3D"+_utcp+"; "+x+_udo;=0A=
 }=0A=
 if (cs=3D=3D0 || _ufns=3D=3D1) return "&utmcn=3D1";=0A=
 else return "&utmcr=3D1";=0A=
}=0A=
function _uRef() {=0A=
 if (_ur=3D=3D"0" || _ur=3D=3D"" || _ur=3D=3D"-") return "";=0A=
 var i=3D0,h,k,n;=0A=
 if ((i=3D_ur.indexOf("://"))<0) return "";=0A=
 h=3D_ur.substring(i+3,_ur.length);=0A=
 if (h.indexOf("/") > -1) {=0A=
  k=3Dh.substring(h.indexOf("/"),h.length);=0A=
  if (k.indexOf("?") > -1) k=3Dk.substring(0,k.indexOf("?"));=0A=
  h=3Dh.substring(0,h.indexOf("/"));=0A=
 }=0A=
 h=3Dh.toLowerCase();=0A=
 n=3Dh;=0A=
 if ((i=3Dn.indexOf(":")) > -1) n=3Dn.substring(0,i);=0A=
 for (var ii=3D0;ii<_uRno.length;ii++) {=0A=
  if ((i=3Dn.indexOf(_uRno[ii].toLowerCase())) > -1 && =
n.length=3D=3D(i+_uRno[ii].length)) { _ufno=3D1; break; }=0A=
 }=0A=
 if (h.indexOf("www.")=3D=3D0) h=3Dh.substring(4,h.length);=0A=
 return =
"utmccn=3D(referral)|utmcsr=3D"+_uEC(h)+"|"+"utmcct=3D"+_uEC(k)+"|utmcmd=3D=
referral";=0A=
}=0A=
function _uOrg(t) {=0A=
 if (_ur=3D=3D"0" || _ur=3D=3D"" || _ur=3D=3D"-") return "";=0A=
 var i=3D0,h,k;=0A=
 if ((i=3D_ur.indexOf("://")) < 0) return "";=0A=
 h=3D_ur.substring(i+3,_ur.length);=0A=
 if (h.indexOf("/") > -1) {=0A=
  h=3Dh.substring(0,h.indexOf("/"));=0A=
 }=0A=
 for (var ii=3D0;ii<_uOsr.length;ii++) {=0A=
  if (h.toLowerCase().indexOf(_uOsr[ii].toLowerCase()) > -1) {=0A=
   if ((i=3D_ur.indexOf("?"+_uOkw[ii]+"=3D")) > -1 || =
(i=3D_ur.indexOf("&"+_uOkw[ii]+"=3D")) > -1) {=0A=
    k=3D_ur.substring(i+_uOkw[ii].length+2,_ur.length);=0A=
    if ((i=3Dk.indexOf("&")) > -1) k=3Dk.substring(0,i);=0A=
    for (var yy=3D0;yy<_uOno.length;yy++) {=0A=
     if (_uOno[yy].toLowerCase()=3D=3Dk.toLowerCase()) { _ufno=3D1; =
break; }=0A=
    }=0A=
    if (t) return _uEC(k);=0A=
    else return =
"utmccn=3D(organic)|utmcsr=3D"+_uEC(_uOsr[ii])+"|"+"utmctr=3D"+_uEC(k)+"|=
utmcmd=3Dorganic";=0A=
   }=0A=
  }=0A=
 }=0A=
 return "";=0A=
}=0A=
function _uBInfo() {=0A=
 var sr=3D"-",sc=3D"-",ul=3D"-",fl=3D"-",cs=3D"-",je=3D1;=0A=
 var n=3Dnavigator;=0A=
 if (self.screen) {=0A=
  sr=3Dscreen.width+"x"+screen.height;=0A=
  sc=3Dscreen.colorDepth+"-bit";=0A=
 } else if (self.java) {=0A=
  var j=3Djava.awt.Toolkit.getDefaultToolkit();=0A=
  var s=3Dj.getScreenSize();=0A=
  sr=3Ds.width+"x"+s.height;=0A=
 }=0A=
 if (n.language) { ul=3Dn.language.toLowerCase(); }=0A=
 else if (n.browserLanguage) { ul=3Dn.browserLanguage.toLowerCase(); }=0A=
 je=3Dn.javaEnabled()?1:0;=0A=
 if (_uflash) fl=3D_uFlash();=0A=
 if (_ubd.characterSet) cs=3D_uES(_ubd.characterSet);=0A=
 else if (_ubd.charset) cs=3D_uES(_ubd.charset);=0A=
 return =
"&utmcs=3D"+cs+"&utmsr=3D"+sr+"&utmsc=3D"+sc+"&utmul=3D"+ul+"&utmje=3D"+j=
e+"&utmfl=3D"+fl;=0A=
}=0A=
function __utmSetTrans() {=0A=
 var e;=0A=
 if (_ubd.getElementById) e=3D_ubd.getElementById("utmtrans");=0A=
 else if (_ubd.utmform && _ubd.utmform.utmtrans) =
e=3D_ubd.utmform.utmtrans;=0A=
 if (!e) return;=0A=
 var l=3De.value.split("UTM:");=0A=
 var i,i2,c;=0A=
 if (_userv=3D=3D0 || _userv=3D=3D2) i=3Dnew Array();=0A=
 if (_userv=3D=3D1 || _userv=3D=3D2) { i2=3Dnew Array(); c=3D_uGCS(); }=0A=
=0A=
 for (var ii=3D0;ii<l.length;ii++) {=0A=
  l[ii]=3D_uTrim(l[ii]);=0A=
  if (l[ii].charAt(0)!=3D'T' && l[ii].charAt(0)!=3D'I') continue;=0A=
  var r=3DMath.round(Math.random()*2147483647);=0A=
  if (!_utsp || _utsp=3D=3D"") _utsp=3D"|";=0A=
  var f=3Dl[ii].split(_utsp),s=3D"";=0A=
  if (f[0].charAt(0)=3D=3D'T') {=0A=
   s=3D"&utmt=3Dtran"+"&utmn=3D"+r;=0A=
   f[1]=3D_uTrim(f[1]); if(f[1]&&f[1]!=3D"") =
s+=3D"&utmtid=3D"+_uES(f[1]);=0A=
   f[2]=3D_uTrim(f[2]); if(f[2]&&f[2]!=3D"") =
s+=3D"&utmtst=3D"+_uES(f[2]);=0A=
   f[3]=3D_uTrim(f[3]); if(f[3]&&f[3]!=3D"") =
s+=3D"&utmtto=3D"+_uES(f[3]);=0A=
   f[4]=3D_uTrim(f[4]); if(f[4]&&f[4]!=3D"") =
s+=3D"&utmttx=3D"+_uES(f[4]);=0A=
   f[5]=3D_uTrim(f[5]); if(f[5]&&f[5]!=3D"") =
s+=3D"&utmtsp=3D"+_uES(f[5]);=0A=
   f[6]=3D_uTrim(f[6]); if(f[6]&&f[6]!=3D"") =
s+=3D"&utmtci=3D"+_uES(f[6]);=0A=
   f[7]=3D_uTrim(f[7]); if(f[7]&&f[7]!=3D"") =
s+=3D"&utmtrg=3D"+_uES(f[7]);=0A=
   f[8]=3D_uTrim(f[8]); if(f[8]&&f[8]!=3D"") =
s+=3D"&utmtco=3D"+_uES(f[8]);=0A=
  } else {=0A=
   s=3D"&utmt=3Ditem"+"&utmn=3D"+r;=0A=
   f[1]=3D_uTrim(f[1]); if(f[1]&&f[1]!=3D"") =
s+=3D"&utmtid=3D"+_uES(f[1]);=0A=
   f[2]=3D_uTrim(f[2]); if(f[2]&&f[2]!=3D"") =
s+=3D"&utmipc=3D"+_uES(f[2]);=0A=
   f[3]=3D_uTrim(f[3]); if(f[3]&&f[3]!=3D"") =
s+=3D"&utmipn=3D"+_uES(f[3]);=0A=
   f[4]=3D_uTrim(f[4]); if(f[4]&&f[4]!=3D"") =
s+=3D"&utmiva=3D"+_uES(f[4]);=0A=
   f[5]=3D_uTrim(f[5]); if(f[5]&&f[5]!=3D"") =
s+=3D"&utmipr=3D"+_uES(f[5]);=0A=
   f[6]=3D_uTrim(f[6]); if(f[6]&&f[6]!=3D"") =
s+=3D"&utmiqt=3D"+_uES(f[6]);=0A=
  }=0A=
  if ((_userv=3D=3D0 || _userv=3D=3D2) && _uSP()) {=0A=
   i[ii]=3Dnew Image(1,1);=0A=
   i[ii].src=3D_ugifpath+"?"+"utmwv=3D"+_uwv+s;=0A=
   i[ii].onload=3Dfunction() { _uVoid(); }=0A=
  }=0A=
  if ((_userv=3D=3D1 || _userv=3D=3D2) && _uSP()) {=0A=
   i2[ii]=3Dnew Image(1,1);=0A=
   =
i2[ii].src=3D_ugifpath2+"?"+"utmwv=3D"+_uwv+s+"&utmac=3D"+_uacct+"&utmcc=3D=
"+c;=0A=
   i2[ii].onload=3Dfunction() { _uVoid(); }=0A=
  }=0A=
 }=0A=
 return;=0A=
}=0A=
function _uFlash() {=0A=
 var f=3D"-",n=3Dnavigator;=0A=
 if (n.plugins && n.plugins.length) {=0A=
  for (var ii=3D0;ii<n.plugins.length;ii++) {=0A=
   if (n.plugins[ii].name.indexOf('Shockwave Flash')!=3D-1) {=0A=
    f=3Dn.plugins[ii].description.split('Shockwave Flash ')[1];=0A=
    break;=0A=
   }=0A=
  }=0A=
 } else if (window.ActiveXObject) {=0A=
  for (var ii=3D10;ii>=3D2;ii--) {=0A=
   try {=0A=
    var fl=3Deval("new =
ActiveXObject('ShockwaveFlash.ShockwaveFlash."+ii+"');");=0A=
    if (fl) { f=3Dii + '.0'; break; }=0A=
   }=0A=
   catch(e) {}=0A=
  }=0A=
 }=0A=
 return f;=0A=
}=0A=
function __utmLinker(l,h) {=0A=
 if (!_ulink) return;=0A=
 var p,k,a=3D"-",b=3D"-",c=3D"-",x=3D"-",z=3D"-",v=3D"-";=0A=
 var dc=3D_ubd.cookie;=0A=
 if (!l || l=3D=3D"") return;=0A=
 var iq =3D l.indexOf("?"); =0A=
 var ih =3D l.indexOf("#"); =0A=
 if (dc) {=0A=
  a=3D_uES(_uGC(dc,"__utma=3D"+_udh,";"));=0A=
  b=3D_uES(_uGC(dc,"__utmb=3D"+_udh,";"));=0A=
  c=3D_uES(_uGC(dc,"__utmc=3D"+_udh,";"));=0A=
  x=3D_uES(_uGC(dc,"__utmx=3D"+_udh,";"));=0A=
  z=3D_uES(_uGC(dc,"__utmz=3D"+_udh,";"));=0A=
  v=3D_uES(_uGC(dc,"__utmv=3D"+_udh,";"));=0A=
  k=3D(_uHash(a+b+c+x+z+v)*1)+(_udh*1);=0A=
  =
p=3D"__utma=3D"+a+"&__utmb=3D"+b+"&__utmc=3D"+c+"&__utmx=3D"+x+"&__utmz=3D=
"+z+"&__utmv=3D"+v+"&__utmk=3D"+k;=0A=
 }=0A=
 if (p) {=0A=
  if (h && ih>-1) return;=0A=
  if (h) { _udl.href=3Dl+"#"+p; }=0A=
  else {=0A=
   if (iq=3D=3D-1 && ih=3D=3D-1) _udl.href=3Dl+"?"+p;=0A=
   else if (ih=3D=3D-1) _udl.href=3Dl+"&"+p;=0A=
   else if (iq=3D=3D-1) =
_udl.href=3Dl.substring(0,ih-1)+"?"+p+l.substring(ih);=0A=
   else _udl.href=3Dl.substring(0,ih-1)+"&"+p+l.substring(ih);=0A=
  }=0A=
 } else { _udl.href=3Dl; }=0A=
}=0A=
function __utmLinkPost(f,h) {=0A=
 if (!_ulink) return;=0A=
 var p,k,a=3D"-",b=3D"-",c=3D"-",x=3D"-",z=3D"-",v=3D"-";=0A=
 var dc=3D_ubd.cookie;=0A=
 if (!f || !f.action) return;=0A=
 var iq =3D f.action.indexOf("?"); =0A=
 var ih =3D f.action.indexOf("#"); =0A=
 if (dc) {=0A=
  a=3D_uES(_uGC(dc,"__utma=3D"+_udh,";"));=0A=
  b=3D_uES(_uGC(dc,"__utmb=3D"+_udh,";"));=0A=
  c=3D_uES(_uGC(dc,"__utmc=3D"+_udh,";"));=0A=
  x=3D_uES(_uGC(dc,"__utmx=3D"+_udh,";"));=0A=
  z=3D_uES(_uGC(dc,"__utmz=3D"+_udh,";"));=0A=
  v=3D_uES(_uGC(dc,"__utmv=3D"+_udh,";"));=0A=
  k=3D(_uHash(a+b+c+x+z+v)*1)+(_udh*1);=0A=
  =
p=3D"__utma=3D"+a+"&__utmb=3D"+b+"&__utmc=3D"+c+"&__utmx=3D"+x+"&__utmz=3D=
"+z+"&__utmv=3D"+v+"&__utmk=3D"+k;=0A=
 }=0A=
 if (p) {=0A=
  if (h && ih>-1) return;=0A=
  if (h) { f.action+=3D"#"+p; }=0A=
  else {=0A=
   if (iq=3D=3D-1 && ih=3D=3D-1) f.action+=3D"?"+p;=0A=
   else if (ih=3D=3D-1) f.action+=3D"&"+p;=0A=
   else if (iq=3D=3D-1) =
f.action=3Df.action.substring(0,ih-1)+"?"+p+f.action.substring(ih);=0A=
   else =
f.action=3Df.action.substring(0,ih-1)+"&"+p+f.action.substring(ih);=0A=
  }=0A=
 }=0A=
 return;=0A=
}=0A=
function __utmSetVar(v) {=0A=
 if (!v || v=3D=3D"") return;=0A=
 if (!_udo || _udo =3D=3D "") {=0A=
  _udh=3D_uDomain();=0A=
  if (_udn && _udn!=3D"") { _udo=3D" domain=3D"+_udn+";"; }=0A=
 }=0A=
 if (!_uVG()) return;=0A=
 var r=3DMath.round(Math.random() * 2147483647);=0A=
 _ubd.cookie=3D"__utmv=3D"+_udh+"."+_uES(v)+"; path=3D"+_utcp+"; =
expires=3D"+_uNx()+";"+_udo;=0A=
 var s=3D"&utmt=3Dvar&utmn=3D"+r;=0A=
 if ((_userv=3D=3D0 || _userv=3D=3D2) && _uSP()) {=0A=
  var i=3Dnew Image(1,1);=0A=
  i.src=3D_ugifpath+"?"+"utmwv=3D"+_uwv+s;=0A=
  i.onload=3Dfunction() { _uVoid(); }=0A=
 }=0A=
 if ((_userv=3D=3D1 || _userv=3D=3D2) && _uSP()) {=0A=
  var i2=3Dnew Image(1,1);=0A=
  =
i2.src=3D_ugifpath2+"?"+"utmwv=3D"+_uwv+s+"&utmac=3D"+_uacct+"&utmcc=3D"+=
_uGCS();=0A=
  i2.onload=3Dfunction() { _uVoid(); }=0A=
 }=0A=
}=0A=
function _uGCS() {=0A=
 var t,c=3D"",dc=3D_ubd.cookie;=0A=
 if ((t=3D_uGC(dc,"__utma=3D"+_udh,";"))!=3D"-") =
c+=3D_uES("__utma=3D"+t+";+");=0A=
 if ((t=3D_uGC(dc,"__utmb=3D"+_udh,";"))!=3D"-") =
c+=3D_uES("__utmb=3D"+t+";+");=0A=
 if ((t=3D_uGC(dc,"__utmc=3D"+_udh,";"))!=3D"-") =
c+=3D_uES("__utmc=3D"+t+";+");=0A=
 if ((t=3D_uGC(dc,"__utmx=3D"+_udh,";"))!=3D"-") =
c+=3D_uES("__utmx=3D"+t+";+");=0A=
 if ((t=3D_uGC(dc,"__utmz=3D"+_udh,";"))!=3D"-") =
c+=3D_uES("__utmz=3D"+t+";+");=0A=
 if ((t=3D_uGC(dc,"__utmv=3D"+_udh,";"))!=3D"-") =
c+=3D_uES("__utmv=3D"+t+";");=0A=
 if (c.charAt(c.length-1)=3D=3D"+") c=3Dc.substring(0,c.length-1);=0A=
 return c;=0A=
}=0A=
function _uGC(l,n,s) {=0A=
 if (!l || l=3D=3D"" || !n || n=3D=3D"" || !s || s=3D=3D"") return "-";=0A=
 var i,i2,i3,c=3D"-";=0A=
 i=3Dl.indexOf(n);=0A=
 i3=3Dn.indexOf("=3D")+1;=0A=
 if (i > -1) {=0A=
  i2=3Dl.indexOf(s,i); if (i2 < 0) { i2=3Dl.length; }=0A=
  c=3Dl.substring((i+i3),i2);=0A=
 }=0A=
 return c;=0A=
}=0A=
function _uDomain() {=0A=
 if (!_udn || _udn=3D=3D"" || _udn=3D=3D"none") { _udn=3D""; return 1; }=0A=
 if (_udn=3D=3D"auto") {=0A=
  var d=3D_ubd.domain;=0A=
  if (d.substring(0,4)=3D=3D"www.") {=0A=
   d=3Dd.substring(4,d.length);=0A=
  }=0A=
  _udn=3Dd;=0A=
 }=0A=
 _udn =3D _udn.toLowerCase(); =0A=
 if (_uhash=3D=3D"off") return 1;=0A=
 return _uHash(_udn);=0A=
}=0A=
function _uHash(d) {=0A=
 if (!d || d=3D=3D"") return 1;=0A=
 var h=3D0,g=3D0;=0A=
 for (var i=3Dd.length-1;i>=3D0;i--) {=0A=
  var c=3DparseInt(d.charCodeAt(i));=0A=
  h=3D((h << 6) & 0xfffffff) + c + (c << 14);=0A=
  if ((g=3Dh & 0xfe00000)!=3D0) h=3D(h ^ (g >> 21));=0A=
 }=0A=
 return h;=0A=
}=0A=
function _uFixA(c,s,t) {=0A=
 if (!c || c=3D=3D"" || !s || s=3D=3D"" || !t || t=3D=3D"") return "-";=0A=
 var a=3D_uGC(c,"__utma=3D"+_udh,s);=0A=
 var lt=3D0,i=3D0;=0A=
 if ((i=3Da.lastIndexOf(".")) > 9) {=0A=
  _uns=3Da.substring(i+1,a.length);=0A=
  _uns=3D(_uns*1)+1;=0A=
  a=3Da.substring(0,i);=0A=
  if ((i=3Da.lastIndexOf(".")) > 7) {=0A=
   lt=3Da.substring(i+1,a.length);=0A=
   a=3Da.substring(0,i);=0A=
  }=0A=
  if ((i=3Da.lastIndexOf(".")) > 5) {=0A=
   a=3Da.substring(0,i);=0A=
  }=0A=
  a+=3D"."+lt+"."+t+"."+_uns;=0A=
 }=0A=
 return a;=0A=
}=0A=
function _uTrim(s) {=0A=
  if (!s || s=3D=3D"") return "";=0A=
  while ((s.charAt(0)=3D=3D' ') || (s.charAt(0)=3D=3D'\n') || =
(s.charAt(0,1)=3D=3D'\r')) s=3Ds.substring(1,s.length);=0A=
  while ((s.charAt(s.length-1)=3D=3D' ') || =
(s.charAt(s.length-1)=3D=3D'\n') || (s.charAt(s.length-1)=3D=3D'\r')) =
s=3Ds.substring(0,s.length-1);=0A=
  return s;=0A=
}=0A=
function _uEC(s) {=0A=
  var n=3D"";=0A=
  if (!s || s=3D=3D"") return "";=0A=
  for (var i=3D0;i<s.length;i++) {if (s.charAt(i)=3D=3D" ") n+=3D"+"; =
else n+=3Ds.charAt(i);}=0A=
  return n;=0A=
}=0A=
function __utmVisitorCode(f) {=0A=
 var r=3D0,t=3D0,i=3D0,i2=3D0,m=3D31;=0A=
 var a=3D_uGC(_ubd.cookie,"__utma=3D"+_udh,";");=0A=
 if ((i=3Da.indexOf(".",0))<0) return;=0A=
 if ((i2=3Da.indexOf(".",i+1))>0) r=3Da.substring(i+1,i2); else return =
"";  =0A=
 if ((i=3Da.indexOf(".",i2+1))>0) t=3Da.substring(i2+1,i); else return =
"";  =0A=
 if (f) {=0A=
  return r;=0A=
 } else {=0A=
  var c=3Dnew =
Array('A','B','C','D','E','F','G','H','J','K','L','M','N','P','R','S','T'=
,'U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9');=0A=
  return =
c[r>>28&m]+c[r>>23&m]+c[r>>18&m]+c[r>>13&m]+"-"+c[r>>8&m]+c[r>>3&m]+c[((r=
&7)<<2)+(t>>30&3)]+c[t>>25&m]+c[t>>20&m]+"-"+c[t>>15&m]+c[t>>10&m]+c[t>>5=
&m]+c[t&m];=0A=
 }=0A=
}=0A=
function _uIN(n) {=0A=
 if (!n) return false;=0A=
 for (var i=3D0;i<n.length;i++) {=0A=
  var c=3Dn.charAt(i);=0A=
  if ((c<"0" || c>"9") && (c!=3D".")) return false;=0A=
 }=0A=
 return true;=0A=
}=0A=
function _uES(s,u) {=0A=
 if (typeof(encodeURIComponent) =3D=3D 'function') {=0A=
  if (u) return encodeURI(s);=0A=
  else return encodeURIComponent(s);=0A=
 } else {=0A=
  return escape(s);=0A=
 }=0A=
}=0A=
function _uUES(s) {=0A=
 if (typeof(decodeURIComponent) =3D=3D 'function') {=0A=
  return decodeURIComponent(s);=0A=
 } else {=0A=
  return unescape(s);=0A=
 }=0A=
}=0A=
function _uVG() {=0A=
 if((_udn.indexOf("www.google.") =3D=3D 0 || _udn.indexOf(".google.") =
=3D=3D 0 || _udn.indexOf("google.") =3D=3D 0) && _utcp=3D=3D'/' && =
_udn.indexOf("google.org")=3D=3D-1) {=0A=
  return false;=0A=
 }=0A=
 return true;=0A=
}=0A=
function _uSP() {=0A=
 var s=3D100;=0A=
 if (_usample) s=3D_usample;=0A=
 if(s>=3D100 || s<=3D0) return true;=0A=
 return ((__utmVisitorCode(1)%10000)<(s*100));=0A=
}=0A=
function urchinPathCopy(p){=0A=
 var d=3Ddocument,nx,tx,sx,i,c,cs,t,h,o;=0A=
 cs=3Dnew Array("a","b","c","v","x","z");=0A=
 h=3D_uDomain(); if (_udn && _udn!=3D"") o=3D" domain=3D"+_udn+";";=0A=
 nx=3D_uNx()+";";=0A=
 tx=3Dnew Date(); tx.setTime(tx.getTime()+(_utimeout*1000));=0A=
 tx=3Dtx.toGMTString()+";";=0A=
 sx=3Dnew Date(); sx.setTime(sx.getTime()+(_ucto*1000));=0A=
 sx=3Dsx.toGMTString()+";";=0A=
 for (i=3D0;i<6;i++){=0A=
  t=3D" expires=3D";=0A=
  if (i=3D=3D1) t+=3Dtx; else if (i=3D=3D2) t=3D""; else if (i=3D=3D5) =
t+=3Dsx; else t+=3Dnx;=0A=
  c=3D_uGC(d.cookie,"__utm"+cs[i]+"=3D"+h,";");=0A=
  if (c!=3D"-") d.cookie=3D"__utm"+cs[i]+"=3D"+c+"; path=3D"+p+";"+t+o;=0A=
 }=0A=
}=0A=
function _uCO() {=0A=
 if (!_utk || _utk=3D=3D"" || _utk.length<10) return;=0A=
 var d=3D'www.google.com';=0A=
 if (_utk.charAt(0)=3D=3D'!') d=3D'analytics.corp.google.com';=0A=
 _ubd.cookie=3D"GASO=3D"+_utk+"; path=3D"+_utcp+";"+_udo;=0A=
 var sc=3Ddocument.createElement('script');=0A=
 sc.type=3D'text/javascript';=0A=
 sc.id=3D"_gasojs";=0A=
 =
sc.src=3D'https://'+d+'/analytics/reporting/overlay_js?gaso=3D'+_utk+'&'+=
Math.random();=0A=
 document.getElementsByTagName('head')[0].appendChild(sc);  =0A=
}=0A=
function _uGT() {=0A=
 var h=3Dlocation.hash, a;=0A=
 if (h && h!=3D"" && h.indexOf("#gaso=3D")=3D=3D0) {=0A=
  a=3D_uGC(h,"gaso=3D","&");=0A=
 } else {=0A=
  a=3D_uGC(_ubd.cookie,"GASO=3D",";");=0A=
 }=0A=
 return a;=0A=
}=0A=
var _utk=3D_uGT();=0A=
if (_utk && _utk!=3D"" && _utk.length>10) {=0A=
 if (window.addEventListener) {=0A=
  window.addEventListener('load', _uCO, false); =0A=
 } else if (window.attachEvent) { =0A=
  window.attachEvent('onload', _uCO);=0A=
 }=0A=
}=0A=
=0A=
function _uNx() {=0A=
  return (new Date((new Date()).getTime()+63072000000)).toGMTString();=0A=
}=0A=

------=_NextPart_000_0000_01C81CCA.CCB00B80--
